package ms.unicorn.dsl;

import java.util.List;

import ms.unicorn.dsl.impl.EPhantomAttribute;
import ms.unicorn.dsl.impl.LanguageElementField;
import ms.unicorn.dsl.runtime.ExecutionContext;
import ms.unicorn.dsl.unicornDSL.DslConvertionScheme;
import ms.unicorn.dsl.unicornDSL.LanguageElement;
import ms.unicorn.dsl.unicornDSL.UnicornLanguage;
import ms.unicorn.dsl.unicornDSL.XExpression;

public interface IModelLanguage extends UnicornLanguage, ILanguageObject {
	
	public static final EPhantomAttribute DEFAULT_DIAGRAM_ATTR = new EPhantomAttribute(LanguageElementField.BOOLEAN, "DefaultDiagram");
	
	ExecutionContext getContext();
	<T> T evaluate(XExpression value);
	<T> T evaluate(XExpression value, ExecutionContext context);

	List<ILanguageElement> getLanguageElements();
	List<ILanguageDiagram> getDiagrams();
	ILanguageDiagram getDiagram(String typeId);
	DslConvertionScheme getConvertionScheme(String convertionScheme);

	String getDefaultDiagramExtension();

	<T extends ILanguageElement> T getLanguageElement(String typeId);
}
